import axios from 'axios';
import { message, Modal } from 'ant-design-vue';
import router from '@/router';

// 创建 Axios 实例
const service = axios.create({
	baseURL: '/api', // 默认基础路径，可根据需求修改
	timeout: 60000, // 超时时间
});

// 显示重新登录 Modal
const loginBack = ref(false);

const showLoginModal = () => {
	loginBack.value = true;
	Modal.error({
		title: '提示：',
		okText: '重新登录',
		content: '登录已失效，请重新登录',
		onOk: () => {
			loginBack.value = false; // 恢复状态
			localStorage.removeItem('satoken');
			localStorage.removeItem('name');
			localStorage.removeItem('id');
			localStorage.removeItem('role');
			router.push('/login');
		}
	});
};

// 请求拦截器
service.interceptors.request.use(
	(config) => {
		const satoken = localStorage.getItem('satoken');
		if (satoken) {
			config.headers['satoken'] = satoken; // 将 satoken 添加到请求头
		}
		return config;
	},
	(error) => {
		return Promise.reject(error);
	}
);

// 响应拦截器
service.interceptors.response.use(
	(response) => {
		const { data } = response;

		// console.log(data);
		// // 根据后端返回的结构处理逻辑
		// if (data.code !== 200) {
		// 	if (data.code === 401) {
		// 		showLoginModal(); // 调用重新登录 Modal
		// 	} else {
		// 		// 其他错误，显示全局错误提示
		// 		message.error(data.message || '请求错误，请检查返回值的结构');
		// 	}
		// 	return Promise.reject(new Error(data.message || 'Error'));
		// }
		return data;
	},
	(error) => {
		if (error.response.data.code === 401) {
			showLoginModal();
			return;
		}
		// 全局错误处理
		const errorMessage = error.response?.data?.message || '网络错误，请稍后再试';
		message.error(errorMessage);
		return Promise.reject(error);
	}
);

// 封装基础请求方法
const request = (url, data = {}, method = 'post') => {
	const options = {
		url,
		method
	};
	if (method === 'get') {
		options.params = data;
	} else {
		options.data = data;
	}
	return service(options);
};

export default request;
